home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Audio / Patchmix / XWindowsSource / list.c < prev    next >
C/C++ Source or Header  |  1992-03-28  |  2KB  |  110 lines

  1. static char rcsid[] = "$Header: list.c,v 1.1 90/08/27 17:09:02 mara Exp $";
  2.  
  3. /*  list.c
  4.  *
  5.  *  Written by Mara Helmuth
  6.  *
  7.  *  Description: List class for Cmix X graphical interface
  8.  * 
  9.  *  $Log:    list.c,v $
  10.  * Revision 1.1  90/08/27  17:09:02  mara
  11.  * Initial revision
  12.  * 
  13.  * Revision 1.2  90/01/30  10:57:29  mara
  14.  * *** empty log message ***
  15.  * 
  16.  * Revision 1.1  90/01/21  12:41:48  mara
  17.  * Initial revision
  18.  * 
  19.  */
  20.  
  21. #include <g++/stdio.h>
  22. #include "plus.h"
  23.  
  24.  
  25. void list::insert(char* a) 
  26. {
  27.     node* temp;
  28.     temp = new node;
  29.     temp -> contents = new char[size];
  30.     if (!temp -> contents)
  31.         perror("list::insert()");
  32.     for (int i=0; i<size; i++)
  33.         temp -> contents[i] = a[i];
  34.     if (head) {
  35.         temp -> next = head;
  36.         head = temp;
  37.     }
  38.     else {
  39.         temp -> next = 0;
  40.         head = temp;
  41.     }
  42.     top = head;
  43. }
  44.  
  45. void list::append(char* a) 
  46. {
  47.     node *previous,*current,*newnode;
  48.     if (head)
  49.     {
  50.         previous = head;
  51.         current = head -> next;
  52.         while (current) {
  53.             previous = current;
  54.             current = current -> next;
  55.         }
  56.         newnode = new node;
  57.         newnode -> contents = new char[size];
  58.         if (!newnode -> contents)
  59.             errx("list::append()");        
  60.  
  61.         newnode -> next = 0;
  62.         for (int i=0; i<size; i++)
  63.             newnode -> contents[i] = a[i];
  64.         previous -> next = newnode;
  65.     }
  66.     else {
  67.         head = new node;
  68.         top = head;
  69.         head -> contents = new char[size];
  70.         if (!head -> contents)
  71.             errx("list::append()");        
  72.  
  73.         head -> next = 0;
  74.         for (int i=0; i<size; i++)
  75.             head -> contents[i] = a[i];
  76.     }
  77. }
  78.  
  79. char* list::get()   // get item from list 
  80. {
  81.     if (!head) 
  82.         return 0;
  83.     else {
  84.         char* r = new char[size];
  85.         if (!r)
  86.             errx("list::get()");
  87.  
  88.         node* f = head;
  89.         for (int i=0; i<size; i++)
  90.             r[i] = f -> contents[i];
  91.         head = head -> next;
  92.         return r;
  93.     }
  94. }
  95.  
  96. void list::clear()
  97. {
  98.     node* n = top;
  99.     if (!n) 
  100.         return;
  101.     while (n) {
  102.         node* nd = n;
  103.         n = n -> next;
  104.         delete nd -> contents;
  105.         delete nd;
  106.     }
  107.     head = 0;
  108.     top = 0;
  109. }
  110.